﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Xml;
using System.Windows.Forms;
using InterfazGrafico.LibreriaConstantes;
using InterfazGrafico.LibreriaClases.Propiedades;

namespace InterfazGrafico.LibreriaClases.Formularios
{
    /// <summary>
    /// Formulario para gestionar la configuración del componente BDModificar.
    /// </summary>
    public partial class FormBDModificar : FormBase
    {
        /// <summary>
        /// Texto temporal del textbox del commit.
        /// </summary>
        private string valorTexto = string.Empty;

        /// <summary>
        /// Manejador del evento click del botón abrir entrada.
        /// </summary>
        /// <param name="sender">Objeto que envía el evento</param>
        /// <param name="e">Parámetros del evento</param>
        private void buttonFicheroEntrada_Click(object sender, EventArgs e)
        {
            OpenFileDialog form = new OpenFileDialog();
            if (form.ShowDialog() == DialogResult.OK)
                textBoxEntrada.Text = form.FileName;
        }

        /// <summary>
        /// Manejador del evento click del botón ver datos.
        /// </summary>
        /// <param name="sender">Objeto que envía el evento</param>
        /// <param name="e">Parámetros del evento</param>
        private void buttonVerDatosEntrada_Click(object sender, EventArgs e)
        {
            this.botonVerDatos(this.comboBoxEstructuras, this.textBoxEntrada.Text);
        }

        /// <summary>
        /// Propiedades del componente.
        /// </summary>
        private PBDModificar Propiedades
        {
            get
            {
                return (PBDModificar)this._propiedades;
            }
        }

        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="controlAsociado">Control base asociado</param>
        public FormBDModificar(ControlBase controlAsociado)
            : base(controlAsociado, new PBDModificar())
        {
            InitializeComponent();
            this.textBoxCommit.TextChanged += new EventHandler(textBoxCommit_TextChanged);
            this.abrir();
        }

        /// <summary>
        /// Manejador del evento producido al cambiar el texto del textbox commit.
        /// </summary>
        /// <param name="sender">Objeto que envía el evento</param>
        /// <param name="e">Parámetros del evento</param>
        void textBoxCommit_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (!string.Empty.Equals(this.textBoxCommit.Text))
                {
                    long.Parse(this.textBoxCommit.Text);
                    this.valorTexto = this.textBoxCommit.Text;
                }
            }
            catch (Exception)
            {
                this.textBoxCommit.Text = this.valorTexto;
            }
        }

        /// <summary>
        /// Almacena los datos de los parámetros del componente en el interfaz.
        /// </summary>
        public override void cargarParametros()
        {
            base.cargarParametros();
            this.textBoxEntrada.Text = this.Propiedades.Entrada;
            this.ProyectoBase.actualizarComboEstructuras(this.comboBoxEstructuras, this.Propiedades.EstructuraEntrada);
            this.textBoxCadenaConexion.Text = this.Propiedades.CadenaConexion;
            this.textBoxCodigoSQL.Text = this.Propiedades.Sentencia;
            this.textBoxCommit.Text = this.Propiedades.Commit.ToString();
            switch (this.Propiedades.TipoBD)
            {
                case InterfazGrafico.LibreriaClases.Clases.TipoBaseDatos.ODBC:
                    this.radioButtonODBC.Checked = true;
                    break;
                case InterfazGrafico.LibreriaClases.Clases.TipoBaseDatos.Oracle:
                    this.radioButtonOracle.Checked = true;
                    break;
                case InterfazGrafico.LibreriaClases.Clases.TipoBaseDatos.SQLServer:
                    this.radioButtonSQLServer.Checked = true;
                    break;
            }
        }

        /// <summary>
        /// Almacena los datos del interfaz en los parámeros del componente.
        /// </summary>
        public override void guardarParametros()
        {
            base.guardarParametros();
            this.Propiedades.Entrada = this.textBoxEntrada.Text;
            this.Propiedades.EstructuraEntrada = this.ProyectoBase.obtenerFicheroComboEstructura(this.comboBoxEstructuras);
            this.Propiedades.CadenaConexion = this.textBoxCadenaConexion.Text;
            this.Propiedades.Sentencia = this.textBoxCodigoSQL.Text;
            try
            { this.Propiedades.Commit = int.Parse(this.textBoxCommit.Text); }
            catch (Exception)
            { this.Propiedades.Commit = 0; }

            if (this.radioButtonODBC.Checked)
                this.Propiedades.TipoBD = InterfazGrafico.LibreriaClases.Clases.TipoBaseDatos.ODBC;
            else if (this.radioButtonOracle.Checked)
                this.Propiedades.TipoBD = InterfazGrafico.LibreriaClases.Clases.TipoBaseDatos.Oracle;
            else if (this.radioButtonSQLServer.Checked)
                this.Propiedades.TipoBD = InterfazGrafico.LibreriaClases.Clases.TipoBaseDatos.SQLServer;
        }
    }
} 